package singleton;

/**
 * 创建时间：2018年03月12日17:56 <br>
 * 作者：fuchaoyang <br>
 * 描述：懒汉式
 */

public class SingleTon2 {
  private static SingleTon2 mInstance = null;

  private SingleTon2() {
  }

  public static SingleTon2 getInstance() {
    if (mInstance == null) {
      // 这里要锁 .class，只有一个
      synchronized (SingleTon2.class) {
        // double check的目的是多个线程访问，前一个线程拿到锁后，开始执行创建实例。另一个线程进入等待。
        // 线程1执行完后，释放锁，别的线程开始执行，这个时候已经初始化好了，再次判断，直接返回。
        if (mInstance == null) {
          mInstance = new SingleTon2();
        }
      }
    }
    return mInstance;
  }
}
